package com.hotel.util;

import java.io.StringReader;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import org.springframework.stereotype.Component;
import org.xml.sax.InputSource;

import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;

@Component
public class CommonTool {
	
	/**
	 * 
	 * @功能：得到当前访问路径
	 * @作者：dinghongxing
	 * @文件名：CommonTool.java 
	 * @包名：com.tongkeapi.util 
	 * @项目名：tongkeapi
	 * @部门：伏守科技项目开发部
	 * @日期：2016年4月16日 下午4:41:30 
	 * @版本：V1.0 
	 * @param request
	 * @return
	 */
	 public static String getCurrentaccesspath (HttpServletRequest request) {
		 
		 int port = request.getServerPort();
		 String accesspath = request.getScheme() + "://" + request.getServerName() + request.getRequestURI() + "?" + request.getQueryString();
		 if(port == 80){
			 accesspath = accesspath.replace(":80 ", "");
		 }
		 return accesspath;
	 }
	 
	 /**
	  * 
	  * @功能：
	  * @作者：dinghongxing
	  * @文件名：CommonTool.java 
	  * @包名：com.tongkeapi.util 
	  * @项目名：tongkeapi
	  * @部门：伏守科技项目开发部
	  * @日期：2016年4月20日 下午2:07:44 
	  * @版本：V1.0 
	  * @param str
	  * @return
	 * @throws BadHanyuPinyinOutputFormatCombination 
	  */
	 public static String pinyinLowcase(String str) throws BadHanyuPinyinOutputFormatCombination {
		 
		 HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
		 format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
		 format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
		 
		 StringBuffer sb = new StringBuffer();
		 for(int i=0;i<str.length();i++) {
			 String[] pinyin = PinyinHelper.toHanyuPinyinStringArray(str.charAt(i), format);
			 sb.append(pinyin[0]);
			 
		 }
		 return sb.toString();
	 }
	 
	 /**
		 * 
		 * @描述：把map转化为xml字符串
		 * @作者:丁洪星 
		 * @部门：伏守科技项目开发部
		 * @日期： 2015年11月4日 下午1:41:39 
		 * @版本： V1.0 
		 * @param map
		 */
		public static String mapToXml(Map<String,Object> map) {
			StringBuffer str=new StringBuffer("<xml>");
			//循环这个map
			for (Map.Entry<String, Object> entry : map.entrySet()) {  
				str.append("<"+entry.getKey()+">"+entry.getValue()+"</"+entry.getKey()+">");
			}  
			str.append("</xml>");
			return str.toString();
		}
		
		/**
		 * 
		 * @描述：把xml转化为map字符串
		 * @作者:丁洪星 
		 * @部门：伏守科技项目开发部
		 * @日期： 2015年11月4日 下午1:41:39 
		 * @版本： V1.0 
		 * @param map
		 */
		 public static Map<String,Object> xmlElements(String xmlDoc)throws Exception {
			 //创建一个新的字符串
			 StringReader read = new StringReader(xmlDoc);
		        //创建新的输入源SAX 解析器将使用 InputSource 对象来确定如何读取 XML 输入
		        InputSource source = new InputSource(read);
		        //创建一个新的SAXBuilder
		        SAXBuilder sb = new SAXBuilder();
		        Map<String,Object> map=new HashMap<String, Object>();
		            //通过输入源构造一个Document
		            Document doc = sb.build(source);
		            //取的根元素
		            Element root = doc.getRootElement();
		            //System.out.println(root.getName());//输出根元素的名称（测试）
		            //得到根元素所有子元素的集合
		            @SuppressWarnings("rawtypes")
		            List jiedian = root.getChildren();
		            
		            //获得XML中的命名空间（XML中未定义可不写）
		            Element et = null;
		            for(int i=0;i<jiedian.size();i++){
		                et = (Element) jiedian.get(i);//循环依次得到子元素
		               // System.out.println(et.getName()+":"+et.getValue());
		                map.put(et.getName(), et.getValue());
		            }
		           
		            return map;

		 }
		
}

